package thread;
/**
 * 商店
 */
public class Shop {
    //public synchronized void buy(){ //在方法上同步监视(加锁)，范围比较大，同步监视对象只能是this
    public void buy(){
        try {
            Thread t = Thread.currentThread();
            System.out.println(t.getName()+": 正在挑衣服");
            Thread.sleep(3000);
            /*
              同步监视块，可以缩小监视范围
              同步监视对象通常使用:临界资源
              临界资源:抢谁谁就是临界资源，说白了，抢谁就锁谁
             */

            //synchronized(new Object()) { //永远不能用实例化的对象作为同步监视器对象
            //synchronized(123){ //同步监视器对象一定是引用类型
            //synchronized("abc") { //虽然可以锁上，但abc并不是合适的锁对象
            synchronized(this) {
                System.out.println(t.getName() + ": 正在试衣服");
                Thread.sleep(3000);
            }
            System.out.println(t.getName()+": 结账离开");
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

















